use tiberius::Config;

#[derive(Debug)]
/// SQL配置结构体
pub struct SqlConfig {
    /// 数据库主机地址
    pub host: String,
    /// 数据库端口号
    pub port: u16,
    /// 数据库用户名
    pub user: String,
    /// 数据库密码
    pub password: String,
    /// 要连接的数据库名
    pub database: String,
    /// 输出文件的路径（如果存在）
    pub output: Option<String>,
}

impl SqlConfig {
    /// 将当前实例的MySQL连接信息格式化为连接字符串
    ///
    /// 连接字符串的格式为 "mysql://用户名:密码@主机:端口/information_schema"
    ///
    /// # 返回值
    ///
    /// 返回一个包含格式化后连接字符串的 `String`
    pub(crate) fn to_mysql_option(&self) -> String {
        format!(
            "mysql://{}:{}@{}:{}/information_schema",
            self.user, self.password, self.host, self.port
        )
    }
    /// 将当前实例转换为MSSQL连接配置
    ///
    /// 返回一个`Config`对象，该对象包含了连接到MSSQL服务器所需的所有配置信息。
    ///
    /// # 返回值
    ///
    /// - `Config`：包含MSSQL连接配置的对象
    pub(crate) fn to_mssql_config(&self) -> Config {
        let mut config = Config::new();
        config.host(&self.host);
        config.port(self.port);
        config.database(&self.database);
        config.authentication(tiberius::AuthMethod::sql_server(&self.user, &self.password));
        config.trust_cert();
        config
    }
}
